\chapter{总结与展望}\label{chap:future}
{

\section{本文工作总结}

随着程序规模不断增大，处理器访存压力不断提升，在重内存负载下处理器面临着“内存墙”的问题。针对重内存负载的程序而言，其性能被访存效率所决定。为了提升处理器访存效率，本文围绕着处理器片上末级缓存开展了一系列的研究工作。

本文先从片上末级缓存的优化入手，设计并实现了一个高性能末级缓存“320 LLC”，在其中利用多种手段优化了高内存负载下的性能。接着为了进一步优化系统性能，为系统引入了新型混合内存。为了解决混合内存高元数据访问延迟这一长久以来的问题，本文设计了一个新型混合末级缓存"Fuse LLC"，利用片上缓存的空间加速混合内存元数据访问。

“320 LLC”研究的核心是探索如何提升片上资源的利用率，以及减少高负载时的阻塞。在缓存总线协议上，为了提升通道利用率，减少额外的写缓冲区资源使用，“320 LLC”采用了新型的“320”总线。针对高负载下可能发生的MSHR阻塞问题，本文设计了高效低占用的请求缓冲-调度队列以缓冲被阻塞的请求。为了提升处理器中缓存子系统的容量使用效率，“320 LLC”采用了非包含式的缓存设计。本文还设计了同组并行机制以提升请求频繁冲突时的处理效率。

“FuseLLC”研究的核心是如何复用片上LLC的空间以加速混合内存的元数据访问效率。为了实现对LLC复用的同时不需要对硬件的设计参数做出过多限制，本文设计了MPtrArray这一混合数据管理结构，使得FuseLLC的参数设计与LLC及混合内存的设计可以解耦合，同时其可以高效地索引在LLC中的元数据。为了保持LLC数据与元数据部分的比例处于一个适合的水平，FuseLLC在全局采用了多点采样动态划分的机制。为了解决局部可能出现的热点冲突问题，本文设计了一种局部冲突避让机制，使得混合内存的元数据可以避开LLC数据的热点。为了能正确而高效地识别热点与冷点区域，本文设计了Major-Minor识别算法，在该任务下比传统的LRU算法取得更好的效果。

在实验环节，“320 LLC”与“320 CPU”组合共同进行系统级测试，结果表明其整体系统性能要超过同类开源处理器，达到商用处理器性能水平。同时“320 LLC”采用Spinal HDL敏捷硬件开发语言编写，使得其易于修改与开展实验，因此“320 LLC”弥补了目前缺乏高性能RTL级末级缓存实验平台的问题。在消融实验中，请求缓冲-调度队列、同组并行设计、非包含式设计均表现出来了对特定负载的性能提升，表明了围绕着减少冲突、提升片上资源利用率对LLC进行优化有助于进一步提升处理器重内存负载下的性能。

在"FuseLLC"的测试中，其以额外125KB的SRAM开销达到了基线模型额外引入约3MB SRAM的性能水平，在SPEC CPU测试中，大部分子项达到了90\%及以上的元数据命中率。实验结果表明，FuseLLC能有效缓解DC元数据访问开销大的问题，同时也为重用处理器片上资源提供了新的方法与路径。


\section{下一步工作}

本文在处理器片上缓存方面开展了一系列的研究工作，设计了一个高性能的LLC，以及一个新型高效的混合末级缓存，分别解决了高性能RTL级实验平台缺乏以及混合内存系统中元数据访问开销大的问题。然而，这些工作中都仍然存在着问题可以进一步研究：

第一，在“320 LLC”的研究中，目前的优化主要是围绕着减少阻塞、增加处理效率、增加资源利用率的方向展开，从更底层视角来看，设计上是在围绕高效的数据流动传输通道所展开。然而LLC还有许多依赖于算法的优化方向可以探索，如替换算法、预取算法，地址哈希算法等。这些算法除了地址信息外，往往还需要更多的信息，如PC地址、历史访问数据等。因此未来可以围绕着信息传输、记录展开一系列的探索与优化。

第二，在“320 LLC”的工作中，为了提升缓存的容量利用效率，实现了基于ExTag的非包含式设计，并使得LLC表现得类似于一个受害者缓存，减少了上下级缓存重复的数据。为非包含式设计提供了一个硬件基础与基本的逻辑规范，从而提升了缓存容量的利用效率。但是为了进一步提升利用效率，还可以从替换算法方面提升非包含式缓存的效率，如识别并丢弃单次使用的数据，识别多核访问的数据并将其保留于LLC中等。

第三，在FuseLLC的工作中，通过重用LLC的数据存储空间从而加速混合内存访问取得了显著的成果，但是当LLC行被划分为储存元数据后，该行的标签将被闲置，也就是说并没有对标签的空间进行充分的利用。同时，为了管理LLC中的重用数据，需要引入MPtrArray这一单独模块，在混合内存利用率低时，该模块的资源没有被充分使用。因此可以探索将LLC的标签部分动态地复用为MPtrArray，从而消除额外MPtrArray的资源开销，进一步增加片上空间利用率。

第四，在FuseLLC的工作中，本文以DRAM缓存的一个组为单位进行管理，并提出了在其插入LLC组时使用的LLC组冷热判定算法。但是在MPtrArray进行管理时仍然使用的是LRU替换算法，而MPtrArray发生替换时，实际上是以组为粒度进行的替换。目前大部分采用单独SRAM作为元数据缓存的工作中，均同样以组为粒度进行替换，而目前还没有针对组的替换算法的相关研究。因此进行DRAM缓存组粒度的替换算法研究是一个有价值的研究方向。

}
